package cn.com.server.common;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.i18n.SessionLocaleResolver;


/**
 * 在springmvc 一种提供四种LocaleResolver，分别是SessionLocaleResolver、CookieLocaleResolver、AcceptHeaderLocaleResolver、 FixedLocaleResolver ，都实现了LocaleResolver接口；
 * 提供设置locale、和读取locale的方法，在set方法中根据策略不同设置到不同的位置，比如session，就放到session中，cookie就放到cookie中，但是AcceptHeaderLocaleResolver、FixedLocaleResolver  这两个类的set方法是直接跑出异常“Cannot change fixed locale - use a different locale resolution strategy”，如果使用他们，一定要重写该方法

 

读取的方法逻辑相对复杂一点，比如session策略，会先读取session，没有读取默认值、没有再从request中获取。cookie也类似，而AcceptHeaderLocaleResolver只从request中获取，FixedLocaleResolver 则只获取默认值。可以根据不同的应用场景使用不同的方案；

 

另外LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); 这句可能比较困惑，这里只是获取，那里放进去的呢？在DispatcherServlet 这个类的doService（）方法中可以看到 request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, this.localeResolver)，同样localeResolver是在initLocaleResolver（） 方法中设置的，这里如果用户没有配置，会设置默认值
@author orange
 *
 */
public class MyLocaleResolver extends SessionLocaleResolver {
    private Locale myLocal;
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        return myLocal==null?request.getLocale():myLocal;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
        myLocal = locale;
    }
}